// 首页数据管理
import { reqGetShopCartInfo, reqDeleteShopCartById, reqUpdateCheckById } from "@/api"

// state: 数据对象
const state = {
    // 购物车列表数据
    shopCartList: []
};
// mutations：专门用于修改state中的数据
const mutations = {
    // 修改state中的购物车列表数据
    GETSHOPCARTLIST(state, shopCartList) {
        state.shopCartList = shopCartList
    }
};
// action：书写业务逻辑，进行异步处理
const actions = {
    // 发送请求获取购物车列表数据
    async getShopCartList({ commit }) {
        let result = await reqGetShopCartInfo();
        if (result.code == 200) {
            commit("GETSHOPCARTLIST", result.data)
        }
    },
    // 发送请求根据id删除购物车数据
    async deleteShopCartById({ commit }, skuId) {
        let result = await reqDeleteShopCartById(skuId);
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    // 发送请求根据id修改购物车商品选中状态
    async updateCheckById({ commit }, { skuId, isChecked }) {
        let result = await reqUpdateCheckById(skuId, isChecked);
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    // 删除选中的商品
    deleteAllCheckedCart({ dispatch, getters }) {
        // 创建一个数组，用于接收每删除一个商品后返回的promise对象
        let promiseAll = [];
        // 遍历购物车商品，删除掉所有选中的
        getters.cartList.cartInfoList.forEach(item => {
            // 如果选中，则删除，并将返回的Promise对象添加到数组中
            if (item.isChecked == 1) {
                promiseAll.push(dispatch('deleteShopCartById', item.skuId));
            }
        });
        // 通过promiseAll返回结果
        return Promise.all(promiseAll);
    },
    // 全选与反选,修改全部商品的状态
    updateAllCartIsChecked({ dispatch, getters }, isChecked) {
        // 创建一个数组，用于接收每删除一个商品后返回的promise对象
        let promiseAll = [];
        // 遍历购物车商品，删除掉所有选中的
        getters.cartList.cartInfoList.forEach(item => {
            // 如果选中，则删除，并将返回的Promise对象添加到数组中
            let promise = dispatch('updateCheckById', {
                skuId: item.skuId,
                isChecked
            })
            promiseAll.push(promise)
        });
        // 通过promiseAll返回结果
        return Promise.all(promiseAll);
    }
};
// getters：类似计算属性
const getters = {
    // 购物车数据
    cartList(state) {
        return state.shopCartList[0] || {}
    },
    // 计算出来的购物车数据
    // cartInfoList(state) {
    //     return state.cartInfoList
    // }

}

export default {
    state,
    mutations,
    actions,
    getters
}